約 6,034,266 件
https://w.atwiki.jp/pqjp/pages/412.html
?xml version="1.0"? TextLibrary Text tag="[Conv_Q3D3a_NAME0]" Flicker /Text Text tag="[Conv_Q3D3a_NAME1]" Elistara /Text Text tag="[Conv_Q3D3a_0000]" I have some news of the lost Dragons! /Text Text tag="[Conv_Q3D3a_0001]" I have some news of the lost Dragons! /Text Text tag="[Conv_Q3D3a_0002]" I have some news of the lost Dragons! /Text Text tag="[Conv_Q3D3a_0003]" I have some news of the lost Dragons! /Text Text tag="[Conv_Q3D3a_0004]" Really? What is it? /Text Text tag="[Conv_Q3D3a_0005]" Really? What is it? /Text Text tag="[Conv_Q3D3a_0006]" Really? What is it? /Text Text tag="[Conv_Q3D3a_0007]" Really? What is it? /Text Text tag="[Conv_Q3D3a_0008]" The cave where we encountered the Undead Dragon - I managed to sneak inside. /Text Text tag="[Conv_Q3D3a_0009]" The cave where we encountered the Undead Dragon - I managed to sneak inside. /Text Text tag="[Conv_Q3D3a_0010]" The cave where we encountered the Undead Dragon - I managed to sneak inside. /Text Text tag="[Conv_Q3D3a_0011]" The cave where we encountered the Undead Dragon - I managed to sneak inside. /Text Text tag="[Conv_Q3D3a_0012]" What were you doing in the Realms of Death by yourself? /Text Text tag="[Conv_Q3D3a_0013]" What were you doing in the Realms of Death by yourself? /Text Text tag="[Conv_Q3D3a_0014]" What were you doing in the Realms of Death by yourself? /Text Text tag="[Conv_Q3D3a_0015]" What were you doing in the Realms of Death by yourself? /Text Text tag="[Conv_Q3D3a_0016]" I apos;ve been flying out every day, gradually covering more and more ground, looking for any sign of them. I finally found it yesterday. /Text Text tag="[Conv_Q3D3a_0017]" I apos;ve been flying out every day, gradually covering more and more ground, looking for any sign of them. I finally found it yesterday. /Text Text tag="[Conv_Q3D3a_0018]" I apos;ve been flying out every day, gradually covering more and more ground, looking for any sign of them. I finally found it yesterday. /Text Text tag="[Conv_Q3D3a_0019]" I apos;ve been flying out every day, gradually covering more and more ground, looking for any sign of them. I finally found it yesterday. /Text Text tag="[Conv_Q3D3a_0020]" What did you see? /Text Text tag="[Conv_Q3D3a_0021]" What did you see? /Text Text tag="[Conv_Q3D3a_0022]" What did you see? /Text Text tag="[Conv_Q3D3a_0023]" What did you see? /Text Text tag="[Conv_Q3D3a_0024]" I saw fresh Dragon tracks going into that cave. I think the Dragons are being held captive inside. /Text Text tag="[Conv_Q3D3a_0025]" I saw fresh Dragon tracks going into that cave. I think the Dragons are being held captive inside. /Text Text tag="[Conv_Q3D3a_0026]" I saw fresh Dragon tracks going into that cave. I think the Dragons are being held captive inside. /Text Text tag="[Conv_Q3D3a_0027]" I saw fresh Dragon tracks going into that cave. I think the Dragons are being held captive inside. /Text Text tag="[Conv_Q3D3a_0028]" Then we should set out as soon as possible. /Text Text tag="[Conv_Q3D3a_0029]" Then we should set out as soon as possible. /Text Text tag="[Conv_Q3D3a_0030]" Then we should set out as soon as possible. /Text Text tag="[Conv_Q3D3a_0031]" Then we should set out as soon as possible. /Text /TextLibrary
https://w.atwiki.jp/proko_translation/pages/31.html
Drawing Muscles What You Need to Know 筋肉を描く あなたが知っておく必要があること Intro to Drawing Muscles https //www.youtube.com/watch?v=RT38yDzizYw http //www.proko.com/drawing-muscles-what-you-need-to-know/ Hello, welcome to Proko! My name is Stan Prokopenko. こんにちは。Prokoチャンネルへようこそ。 私はStan Prokopenkoです。 We re finally at the part of the course you ve all been waiting for. 我々は、このコースで ついに皆さんが待ち望んでいた 単元まで来ました。 Muscles! In this video, we ll go over what you need to learn for each muscle, some general muscle anatomy, and the types of muscles. 筋肉です! このビデオでは、 個々の筋肉を学ぶために何が必要なのかを見ていきます。 いくつかの筋肉の解剖学の総論、 そして筋肉の種類です。 Need-to-Know! or Should Know 知っておく必要があるもの、 知っておくべきもの。 There s a basic checklist of things we will learn about each muscle. ここには基本的な 我々がこれから個々の筋肉について学ぶにあたっての、 チェックリストがあります。 This includes the muscle name, origin, insertion, function, antagonist, and form. チェックリストには、 筋肉の名前、 起始、 停止、 機能、 拮抗筋 形です。 The name of the muscle is the least important thing to know about the muscle. 筋肉の名前は、 筋肉の理解において、 最も重要性の低い項目です。 Many artists you ask will say you don t need to know the names at all. 多くの芸術家が、 あなたは筋肉の名前について知る必要は全くないと いうでしょう。 That s partially true. これは、部分的には真実です。 It depends on how deep you want to learn anatomy. それは、あなたがどのぐらい深く解剖学を学びたいかに依存します。 I got away without knowing the names until I started teaching it. 私は、筋肉について教え始めるまで、 名前を知ること無しに逃げていました。 But, knowing the name does have some benefits. しかし、 名前を知ることにはいくつかの利点があります。 Knowing the muscle name allows us to talk about anatomy. 名前を知ることで、 我々は解剖学について話し合えます。 I ll give you tricks to help remember muscle names whenever I can. 私はあなたに、 筋肉の名前をいつでも思い出せる コツを教えようと思います。 There s usually some kind of logic to the name that hints at the muscle s location, function, or form. 筋肉の名前にはいくつかの理屈が存在します。 それは、筋肉の位置、機能、形について 示唆しています。 For example, the “Extensor digitorum muscle. 例えば、 “Extensor digitorum muscle“(指伸筋)です。 ” This is the muscle in your hand that extends, or straightens, your digits. 「これは、手の中にあり、 指を伸ばしたりまっすぐにしたりする筋肉です」 Where the muscle attaches is important to know as well. 筋肉がどこに付着しているかも 同様に重要です。 It helps us precisely and confidently map out the muscle. このことが、我々が正確に、自信をもって 筋肉の地図を精密に描くことを助けます。 It also hints at the muscle s function, as we ll see in a minute. それは、また、さっと見ただけで 筋肉の機能のヒントを得られるでしょう。 There s two areas of attachment. ここには二つの付着している範囲があります。 The Origin is the attachment on the skeleton that is more stationary and closer to the center. 起始(origin)は、 骨への付着であり、 より静的で中心に近いものです。 The Insertion is the attachment on the farther and more moveable part of the body. 停止(Insertion)は より遠い付着であり、 人体のより動的な部分です。 You should also know the function, or what action each muscle is responsible for. あなたは機能についても知っておくべきです。 つまり、 個々の筋肉が、どんな動作を担っているかです。 Fortunately, functions are pretty easy, because muscles can only do one thing... 幸運なことに、 機能はとても簡単です。 なぜなら、筋肉は一つのことしかできないからです。 Contract. 収縮です。 When you flex a muscle, it contracts, and pulls the insertion closer to the origin. あなたが筋肉を曲げるとき、 それは収縮します。 そして、停止部を起始部に近づけます。 muscles work in pairs. 筋肉は対で働きます。 When one muscle contracts, its antagonist is stretched out. ある筋肉が収縮するとき、 その筋肉の拮抗筋は 延ばされています。 The bicep flexes the arm and the tricep extends the arm. 上腕二頭筋は、腕を曲げ、 上腕三頭筋は、腕を伸ばします。 In your drawings, try to exaggerate the hardness of the active muscle, and let the relaxed muscle conform to gravity. あなたのドローイングでは、 活動している筋肉の硬さを誇張しましょう。 そして、緩んでいる筋肉は重力に従うようにしましょう。 Being aware of the muscle s function is essential for drawing the figure, so you know which muscles to flex and which to relax. 筋肉の機能についてわかっているということは、 人物を描くことにおいて本質的なことです。 つまり、 どの筋肉が縮み、どの筋肉が緩んでいるか 知っているということです。 It gets you away from drawing a “noun” and back to drawing a “verb,” and your poses will have greater animation and impact because of it. そのことにより、 あなたは「名詞」を描くことをやめ、 「動詞」を描けるようになり、 そして、 あなたの描いたポーズは、それによって 活力と強い印象を持てるようになります。 If you want to draw constipated superheros, then you can ignore what I just said. もしあなたが元気のないスーパーヒーローを 描きたいのなら 私が言ったことは無視してください。 A muscle s name, attachments, and function can be summed up with just a few words. 筋肉の名前、付着、そして機能は、 ちょっとした文章でまとめられます。 We re artists. 我々はアーティストです。 What we really need to study is the Shape and Form of the muscles. 我々が本当に勉強する必要があるのは、 立体構造や輪郭です。 We have to understand the muscle in three dimensions, so we can draw its shape from all angles. 我々は、筋肉を三次元で理解するべきです。 そうすれば我々はその形状をあらゆる方向から描けます。 This includes variations like stretched, relaxed, or flexed, and different body types. このことには、 伸びたり、緩んだり、縮んだり、いろいろな 種類の体形の多様性についても含まれています。 We ll study the plane changes, the simplified forms, and other detailed awesomeness about the forms. 我々は、 平面の変化や、 単純化された形、 その他の形についての細部の見事さについて 学んでいきます。 It will help you invent figures from your imagination and make them anatomically accurate and dynamic. これが、 あなたが、人物画をあなたの想像から発明したり、 それらの人物画を解剖学的に正確かつ躍動的にすることを 助けます。 !--ここから有料-- !--ここまで-- If you re enjoying this course, share it with your friends. And if you want to be updated about new videos, go to proko. com/subscribe!
https://w.atwiki.jp/takumi-memo/pages/56.html
Overview of the Tutorial このチュートリアルは、特定のコンテントのURLを書き直すためのConfluence Autoconvertの拡張をどのようにするかについて触れる。 次のコンポーネントを構成するプラグインを作成する。 A JavaScript file providing an Autoconvert handler. A plugin descriptor (XML file) to enable the plugin module in the Atlassian application. これらのコンポーネントは全て、単一のJAR Fileに含まれている。 Required Knowledge このチュートリアルを完全なものにするために, JavaScript developmentの基礎についての知識が必要である。 How to create an Atlassian plugin project using the Atlassian Plugin SDK. Step 1. Create the Plugin Project まずはプラグインプロジェクトを作成する。 group-id com.example.plugins.tutorial artifact-id autoconvert-dev-docs Step 2. Add Plugin Metadata to the POM プラグインなどの情報に関するmetadataを加えるために、POM fileを編集する。 1.Edit the pom.xml file in the root folder of your plugin. 2.Update the confluence.version element to at least Confluence 4.1 confluence.version 4.1 /confluence.version 3.Add your company or organisation name and your website to the organization element organization name Example Company /name url /url /organization 4.Update the description element description Changes link text on URLs pasted from developer.atlassian.com. /description 5.Save the file. Step 3. Add a Plugin Module to the Plugin Descriptor src/main/resources/atlassian-plugin.xmlのプラグイン・ディスクリプタにプラグイン・モジュールを追加する。 The extension point for Autoconvert is through JavaScript, so you'll need to add a JavaScript Web Resource Module. Your web resource module needs to specify the location of a js file that will create your autoconvert handler. The things that separate it from other Web Resource Modules are ■It should depend on the core autoconvert plugin so that it will always be loaded after it, and will not be loaded if that plugin is missing. ■It should be loaded whenever the editor is loaded, by specifying the editor context. Here's one I prepared earlier ? !-- Add this to your atlassian-plugin.xml -- web-resource key="autoconvert-dev-docs" name="Autoconvert developer.atlassian.com example handler" description Changes link text for URLs pasted from /description resource type="download" name="autoconvert-dev-docs.js" location="js/autoconvert-dev-docs.js"/ !-- This will ensure the resource is loaded after autoconvert, and only if autoconvert is enabled. -- dependency com.atlassian.confluence.plugins.confluence-paste autoconvert-core /dependency !-- Assuming the dependency above is met, this context means that whenever the editor is loaded, so is your autoconvert handler. -- context editor /context /web-resource Step 4. Write the Code for your Autoconvert Handler Create a js directory in src/main/resources and create a new file called autoconvert-dev-docs.js file in that directory. Note that this matches the location in the resource in the XML descriptor. The simplest possible Autoconvert handler looks like this ? (function(){ AJS.toInit(function($){ // Create a handler that does nothing but call the continuation done() var pasteHandler = function(uri, node, done){ done(); }; // Register the handler tinymce.plugins.Autoconvert.autoConvert.addHandler(pasteHandler); }); })(); Focus on the pasteHandler function. The arguments passed to it are ■uri - a uri object as produced by the parseUri library. ■node - a jquery object for the pasted anchor node. ■done - a continuation function for the pasteHandler to call when it's done. Call it with no arguments when you do not want to change the link, or pass it the replacement or modified node when you do have changes. It should always be called exactly once in all possible code paths. The continuation done may seem very complicated now, but it's helpful for asynchronous conversions, which we won't discuss in this tutorial. Take a look at a simple developer.atlassian.com ("DAC") address, such as https //developer.atlassian.com/display/CONFDEV/Confluence+Developer+Documentation. The parseUri library has a demo page at http //stevenlevithan.com/demo/parseuri/js/. If you paste https //developer.atlassian.com/display/CONFDEV/Confluence+Developer+Documentation into its Input field you will see various uri parts available from the uri object. In this case the following parts are important ■host should be "developer.atlassian.com" ■directory should start with "/display/" ■directory should then contain a space key and a page title ■anchor should be blank for now. Converting links to headings is out of scope for this tutorial. You can split the directory part easily enough using the built-in split function. Note that the directory starts with a slash and split will thus give an array of ["", "display", "CONFDEV", "Confluence+Developer+Documentation"] So start by writing a condition for when you want to do a conversion ? if (uri.host == "developer.atlassian.com" directoryParts.length == 4 directoryParts[0] == "" directoryParts[1] == "display" uri.anchor == "") { Then think about what you want to do when we find such a link. The existing URL is fine, you don't need to change anything about the destination, but you do want to change the text of the link. There are a few things you could change it to. You might want to include the spacekey (directoryParts[2]) or an identifier to say that it's on developer.atlassian.com. Eg ? But it's probably nicer most of the time to leave it out and just go with the page name. There's also some tidying we have to do. You need to decode any special characters in the path using the built-in decodeURIComponent function, and that still won't turn plus characters into spaces, so you have to do that too using replace ? var pageName = decodeURIComponent(directoryParts[3]).replace(/\+/g, " "); node.text(pageName); Then we have to tell the controlling code, via the continuation, that we do want to replace the node. ? done(node); Once the conversion is done, all the handlers will be retried, so the handler has to ensure it doesn't just keep matching forever. The easiest way to do that is add an extra check to the condition, that node.text() == uri.source. All together it looks like this ? (function(){ AJS.toInit(function($){ var pasteHandler = function(uri, node, done){ var directoryParts = uri.directory.split('/'), pageName; if (uri.host == "developer.atlassian.com" directoryParts.length == 4 directoryParts[0] == "" directoryParts[1] == "display" uri.anchor == "" node.text() == uri.source) { pageName = decodeURIComponent(directoryParts[3]).replace(/\+/g, " "); node.text(pageName); done(node); } else { done(); } }; tinymce.plugins.Autoconvert.autoConvert.addHandler(pasteHandler); }); })(); Step 5. Build, Install and Run the Plugin Follow these steps to build and install your plugin, so that you can test your code. If you have not already started the application, start it now ■Open a command window and go to the plugin root folder (where the pom.xml is located). ■Run atlas-run (or atlas-debug if you might want to launch the debugger in your IDE). From this point onwards, you can use FastDev to reinstall your plugin behind the scenes as you work. Use the FastDev servlet to trigger the reload 1.Make the changes to your plugin module. 2.Go to your browser and navigate to the FastDev servlet http //localhost 1990/confluence/plugins/servlet/fastdev. 3.Do a hard refresh of the page ■Shift+Reload in most browsers. ■Ctrl+Reload on Windows or in Internet Explorer. ■In Safari 5, you will need to hold down the Shift key while clicking the Reload icon in the Location bar. 4.Go back to step 1. As an alternative to FastDev, you can keep the application running in one command window and use the CLI (command line interface) in another window to dynamically re-install your plugin after each change. 1.Open a new command window and go to the plugin's root folder (where the pom.xml is located). 2.Run atlas-cli to start the CLI. 3.Wait until you see a message, Waiting for commands. 4.Run pi (plugin install) to compile, package and install the plugin. 5.Go back to your browser. The updated plugin will have been installed into the application, and you can test your changes. (You may need to refresh the browser page first.) 6.Make your changes in your IDE. 7.Go back to step 1. The full instructions are in the SDK guide. Step 6. Try it out. Try copying the URL of this page and pasting it into the editor. The text of the link should change so that it looks like Plugin Tutorial - Extending Autoconvert rather than just the URL. Step 7. Play! Write your own extensions. This is about the simplest autoconvert extension possible, but there are more things you can do. Just quickly, here are a few How-to examples Inserting an image If you want to change the link into an image ? var imageUrl = "the url of the image, maybe uri.source, or maybe a modified form of that". done($(' img class="confluence-embedded-image confluence-external-resource" src="' + imageUrl + '" data-image-src="' + imageUrl + '"/ ')[0]); Inserting a macro If you want to change the link into a Confluence macro (must be a 4.0+ style xhtml macro) ? Inserting arbitrary converted wiki content Sometimes the easiest way to write editor format html is to ask Confluence to produce it from wiki markup. ?
https://w.atwiki.jp/proko_translation/pages/13.html
How to Draw Gesture_Step by Step ジェスチャーの描き方-段階ごとに https //www.youtube.com/watch?v=8j39NqwL7s4 http //www.proko.com/how-to-draw-gesture-step-by-step/ prerequisite 必修科目 Last week I explained gesture and this week I’ll show you examples of how to apply it. 先週、私はジェスチャーについて説明しました。 今週は、どうやってジェスチャーを絵に適用させるか 説明したいと思います。 If you haven’t watch the gesture video yet, pause this and go watch it... もしジェスチャーのビデオを見ていないのなら、 一時停止して、前回のビデオを見てください。 Let’s take a look at some examples and find their gestures. いくつかの例を見て、それらのジェスチャーを見つけてみましょう。 30 Second poses 30秒ポーズ Usually I ll start with the head, but not always. 私はたいてい、頭から描き始めますが、 いつもではありません。 If I m in the mood to identify the torso first, I ll do that. トルソを最初に定義したい気分なら、そうします。 There are no rules about this. これについてのルールはありません。 Then find the gesture of the neck, and the action line to the foot. その後、首のジェスチャーと、 足の動作を表す線をを見つけます。 Looking at the torso, the first thing I notice is that the left side is pinching and the right side is stretching. トルソを見て、 私が最初に気づいたことは、 左側は圧迫されていて、 右側は伸ばされているということです。 So, the shoulders will be slanted one way, and the hips the other way. ですので、 肩は一方へ傾いているだろうし、 尻は別の方へ傾いているでしょう。 This brings the points closer together on the left side, compressing the forms, and brings the points further away from each other on the right side, stretching the forms. このことにより、それらの目印となる点は左側では 互いに近づき、形を圧縮し、 右側では逆に互いに離れ、 形を伸ばします。 Find some rhythm lines for the legs... 足のリズムを表す線を見つけます。 And the arms. 腕も同様にです。 That right there is the most simplified version of this pose. これが、最もポーズを単純化したものです。 It’s only a few lines but in 30 seconds it’s enough to explain what the pose is doing. ここには数本の線しかありません。 しかし、 30秒では、ポーズが何をしているか説明すれば十分です。 !--ここから有料-- !--ここまで-- You might feel like 30 seconds is just too quick. あなたは、30秒は短すぎると思うかもしれません。 In that case there are two possibilities. その場合、二つの可能性があります。 Either you’re brand new at this and you really DO need a little extra time. あなたがこのことに慣れていないか、 もしくは、 あなたが本当にもうちょっと余計に時間がほしいかです。 You can try 45 seconds to a minute. あなたは45秒で描いてもいいでしょう。 Or you re really over thinking it. もしくはあなたが、考えすぎているかです。 Looking at the contours too much will cause you to draw things that are not necessary to capture the motion and you end up running out of time. 輪郭線を見すぎることは、 動きをとらえるのに必要のないものを描くことを引き起こし、 結果、時間を使い果たすことになります。 Remember to draw what you feel, not what you see. あなたが見たものではなく あなたが感じるものを描くということを 思い出してください。 2 minute poses 2分ポーズ 10-15 seconds of analyzing in the beginning 初めの10~15秒は分析の時間です。 And taking 10-15 seconds to just look and analyze the pose is not a waste of time. 10~15秒をただポーズを観察、分析することに使うのは、 時間の無駄ではありません。 It allows you to create a game plan and use the 2 minutes you have wisely. そのことであなたは、 試合の計画を作ること、 そして2分を賢く使うこと ができるようになります。 Ok, so again I ll start with a clean oval for the head and then attach the rhythm of the neck following the sternocleidomastoid muscle. はい、 では、 頭を表すきれいな卵型から始め、 その後、 胸鎖乳突筋を追いながら、 首のリズムを加えます。 Angle of the shoulders and rhythm of the torso using the centerline to determine that curve. 肩の角度を描き、 トルソのリズムを描きますが、 リズムのカーブを決めるために中心線を使います。 From a front view I ll start from the shoulders and drop a rhythm through the side of the ribcage to the pubic bone. 前から見たとき、 私は、 肩から始めます。 そして、胸郭の側面を通って、 恥骨までに至るリズムを描きいれます。 Get the pinching on the right side and stretch on the left. 右側の圧縮と、左側の伸長も加えましょう。 Two c curves for the gesture of the leg from the front. 前から見た足のジェスチャーのための 二つのCカーブ。 Indicate the other side of the leg with somewhat parallel rhythm, considering the thickness of each part of the leg. 幾分平行のリズムを伴った違う側の足を描きます。 各々の足の厚みを考えましょう。 Now I ll find the arm rhythms, remembering to look for the motion not the contour. 今、私は腕のリズムを見つけています。 輪郭線ではなく動きを探ることを思い出しながらです。 And an upside down heart shape for the breasts. そして、さかさまになったハート形を乳房とします。 For a head in profile, I ll start with a circle for the cranium, angle for the front of the face and jaw. 横顔を描くために、 私は頭蓋を表す円から始め、 それに顔面とあごの角を加えます。 Kind of like a simplified version of Loomis’s method I went over in my portrait fundamentals series. 私が肖像画のシリーズで説明した、 ルーミスメソッドの簡易版のようなものです。 Get the rhythm of the neck and the shoulders. 首と肩のリズムを加えます。 In the torso, I m seeing a stretch on the left side of the back and a pinch on the right side. トルソでは、私は 左側の背中の伸長と、 右側の圧縮を見ます。 Consider tapering/thickness of forms. 形の先細り、厚みを考えましょう。 As you get comfortable ignoring detail and seeing the big picture, you can move on to a slightly more structural approach. あなたが、細部を無視し、大きな構造に目を向けることを 心地よくできるようになったのなら、 幾分構造的な取り組みに移っても良いでしょう。 Now you are giving some love and thought to the forms. 今は、あなたは、 形というものに愛と思慮をもって取り組んでいるのです。 Still not drawing any 3d forms but considering them in the design of the gesture. まだ、三次元的には描かず、 ジェスチャーのデザインだと思いましょう。 I’m staying true to the thickness of the form and any kind of tapering from thick to thin, such as from the hip to the knee. 私は形の厚みと、 あらゆる種類の厚みから細さへの先細り、 尻から膝へのような、 に忠実であり続けています。 Whereas before, in the 30 second drawings, I wasn t concerned about that at all. 一方で、 30秒ドローイングでは、 私はそうした厚みとか幅は 全く考慮していませんでした I was just drawing the motion. ただ動きのみを描いていました。 If you tend to make your poses stiff, think of the torso and limbs as a snake. もし、あなたがポーズを固く描きがちなら、 トルソと手足を蛇のつもりで考えてください。 Forget about any bones, hard forms, rigid forms. 骨や、固い形、柔軟性の無い形は忘れてください。 Think of it as a fluid cylinder and try to see the motion. それを流れるような円筒形と考え、 動きを見るように試みてください。 Find the c curves and s curves. CカーブとSカーブを見つけるのです。 Draw smart not fast. 素早く描くのではなく、 賢く描いてください。 When you do these gesture drawings of 2-10 minutes, the point of the exercise is not to draw as fast as you can to draw as much as possible. あなたが2~10分のジェスチャードローイングを行う時、 練習の要点は、 可能な限り早く描くことではありません。 If you draw as fast as you can you will have messy,bad lines and the more you do the exercise the more that will become a habit and eventually you re drawing ugly lines whether its timed or not. もし、あなたができるだけ早く描こうとすれば、 散らかった悪い線を引くことになり、 そのまま続ければ練習するごとに それが習慣になり、 最終的には、時間制限があろうとなかろうと、 醜い線を描いていることになるでしょう。 Instead of drawing fast, draw smart. 早く描く代わりに、 賢く描きましょう。 Simplify the figure down to whatever degree needed to draw it in the time you have. 時間制限内で描くために、 必要とされている範囲で 人物画を単純化してください。 As the time decreases, just filter out the next least important thing to finish the drawing in the allotted time. 時間が減少したとき、 割り当てられた時間内に終わらせるために 次の最小限の重要なことまでろ過してください。 With a 30 second or 1 minute pose you only have enough time to draw the most essential elements. 30秒もしくは一分のポーズでは、 最も根本的な要素を描く時間しかないでしょう。 But keep your lines clean and accurate. しかし、線はきれいに正確に保ってください。 Look for a rhythm from the arm all the way to the end of the fingers. 腕全体から、指の先にまで至る リズムを探します。 Unless separating the hand to its own rhythm is essential for the body language, try to find a continuous flow. 手それ自身のリズムを見出すことが ボディーランゲージにとって重要でない限り、 継続的な流れを見つけるようにしてください。 !--ここから有料-- !--ここまで-- Starting with the head neck shoulders. 頭、首、肩からはじめます。 And then observing the c curve of the torso. その後、トルソのCカーブを観察します。 The tendency for many people would be to draw the torso straight because it almost is. 多くの人々の傾向として、 トルソがほとんどまっすぐであるとして トルソをまっすぐ描く傾向にあります。 The c curve is very subtle, but important to make her look relaxed. トルソのCカーブは大変微細なものです。 しかし、モデルの彼女がくつろいで見えるには重要なことです。 Making it too straight would make her feel tense and stiff. トルソをまっすぐにしすぎると、 彼女が緊張して固くなっているように感じてしまいます。 Rhythm of breasts Curve over the breast around the pit of neck. 首のくぼみの周りの、 胸を横断するカーブです。 Another from nipple to nipple and also under the breast curving up to show that they re wrapping over the rib cage. 別な線が乳首から乳首へ、 そしてまた別な線は、 乳房の下で山なりになっており、 乳房が胸郭を包み込んでいることを表しています。 This is more important than showing the downward curves of each individual breast. これは、個々の乳房の、凹字型の下向きのカーブを描くことより 重要です。 These curves would go against the large form of the rib cage. 個々の乳房のカーブは、 胸郭の大まかな形に逆らっているようです。 They’re important to show the forms of the individual breasts, but at this phase, focus on the bigger picture of identifying the pose. 乳房の形を描くことは重要ですが、 この段階では、 ポーズを識別するための大まかな図に集中してください。 Anatomical detailed forms come later. 解剖学的な細部は後に説明します。 When it’s not too important to show the breasts wrapping over the rib cage, like, when the ribcage is vertical, I like using an upside-down heart rhythm. 乳房が胸を包んでいる様が胸郭を表すのに 重要ではないとき、 例えば、 胸郭が垂直な時、 私は、さかさまになった ハート形のリズムを使うことが好きです。 Again, Curve over the breast around the pit of neck and then under each breast. 首のくぼみをまわって、胸の上部のカーブを描き、 その後、個々の乳房の下のカーブを描きます。 Make sure the heart is symmetrical and this V shape between the breasts lands on the centerline and follows the gesture. ハート型は、対称的であること、 この乳房の間のV字型(画面青線参照)は 中心線に乗っており、ジェスチャーを追うということを 確かなものにしてください。 I ll use a zig zag in the arm, giving the elbow a sharp corner. ジグザグの線を腕に使い、 肘に鋭いコーナーを付けます。 This will add more tension there, which is good because a lot of the weight of her body is being supported by that elbow. 肘を鋭くすることは、このポーズに緊張感を与えますが、 そうするのは大変よいことです。 なぜなら、彼女の体重の大部分が この肘によって支えられているからです。 The other arm is relaxed, so I ll use a fluid s curve. もう一方の腕はくつろいでいますので、 私は流れるようなS字カーブを使います。 Shin Curve 脛のカーブ Curve the shin out at the tibia and then back in at the foot. 脛骨のあたりで脛を外側(この場合凸が画面右側)にカーブさせ、 その後、 足(足首より下)で内側(凸が画面左側)にカーブさせます。 It’s very common to see a beginner draw this area straight and lose the elegant gesture of the shin to the foot. 初心者が、この範囲をまっすぐに描いてしまい、 そのせいで、脛から足にかけての上品なジェスチャーが 失われてしまうのはよくあることです。 Make sure to think about this motion as you draw the contour. あなたが輪郭線を描くとき、 この動きについて考えることを忘れないでください。 Or a better way of saying it, think of the motion as you “design” the contours. もしくはよりよく言い換えれば、 あなたが、輪郭線を「デザイン」するとき、 動きをよく考えください。 Because when you’re designing something, you’re changing it with a purpose. なぜなら、あなたが何かをデザインするとき、 あなたはそれを目的に応じて変えているわけです。 Exaggerate 誇張 Get used to being able to exaggerate the gesture. ジェスチャーを誇張することができるように慣れてください。 Push the story to be more exciting and clearer to the viewer. 物語が鑑賞者にとってより刺激的で明確になるように 物語を強調してください。 I’ll show you a pose where I’ll push the gesture REALLY far. 私は、ポーズをより大げさにするのを見せようと思います。 As far as I can without breaking it. ブレーキをかけることなしに、できるだけやって見ます。 !--ここから有料-- !--ここまで-- With this pose I m gonna try to exaggerate the motion of the pelvis going back and to the right. このポーズでは、 私は 後方右側へ動いている 骨盤の動きを 誇張しようと思います、 So, I ll rotate the head to the right to follow this motion. ですので、私は、 この動きを追うために、 頭を右側へ回転させました。 Consider the forms as you identify the gesture. ジェスチャーを識別するとき、 形についてよく考えてください。 When exaggerating you need to exaggerate thinking 3-dimensionally, not just 2d curves. 誇張するとき、 単なる二次元のカーブではなく、 あなたは、三次元のカーブを考えながら 誇張する必要があります。 Even though you re drawing 2d curves, you kinda have to curve them in a way that still makes sense 3-dimensionally. なるべくカーブに三次元的な意味を持たせましょう。 Gesture is like the eyes of a portrait drawing. ジェスチャーは、肖像画における「目」のようなものです。 Eyes give the portrait its life and gesture gives the figure its life. 目は、肖像画に命を与えますし、 ジェスチャーは人物画に命を与えます。 Assignment and have fun! 課題と楽しみ If I were to give you an assignment for this, if this were a real classroom environment, I d say get a bunch of figure photos and draw 10 to 20 of them every day. もし、この課題をあなたに与えるとして、 これが実際の教室の環境なら、 わたしは、 沢山の写真を手に入れて、 毎日10から20のドローイングを描きなさい、というでしょう。 I promise you will improve. 私はあなたが改善できると保証します。 And rewatch this episode and last week’s episode a few times. そして、少しの時間、このビデオと先週のビデオを見返しましょう。 Remind yourself what you re trying to do. あなたが何をしようとしているのか思い出してください。 And listen for those things that I repeat several times. そして、私が繰り返し言っていることを聞いてください。 Don t copy, don t draw the contour, find the story etc. 複写しない、 輪郭線を描かない、 物語を見つけよう等々。 Also, try drawing along. 同時に、 平行して描いていきましょう。 The premium section has a lot of videos of example gesture drawings in real time. 有料版では、 リアルタイムに描いたジェスチャードローイングの作例の ビデオがたくさんあります。 So you can draw along, pause if you need to. それに沿って描けますし、 必要なら一時停止できます。 But most of all have fun with it. しかし、重要なのは楽しむことです。 Don t stress over it or get mad if they don t turn out good right away. この練習がすぐにうまくいかないからと言って イライラしたり怒ったりしてはいけません。 Enjoy the process, and realize that you re drawing! 過程を楽しみましょう。 そして、あなたが何を描いているかを自覚しましょう。 It s a treat to just sit down and draw for a while. ただ座り、しばらくの間描くのは、ごちそうです。 If you re having fun and enjoying yourself, you ll learn better. もし、楽しみ、あなた自身のことを楽しめるなら、 あなたは良く学ぶことができるでしょう。 !--ここから有料-- !--ここまで-- In the premium section, I ll be posting student work and videos of me correcting those student drawings. 有料版では、 私は 生徒の作品と、 それらの生徒の作品を修正したビデオを 提出します。 That s where you come in. あなたの作品が提出されるところです。 So, practice some gesture drawings using the concepts from this lesson and last week’s. ですので、 今週と先週の概念を使いながら、 ジェスチャードローイングを練習してください。 Post your drawings on your Facebook page, tumblr, blog, forum, wherever you like to post your artwork. フェイスブック、 タンブラー ブログ、 フォーラム、 あなたが投稿したいところどこでも、 あなたのドローイングを投稿してください。 In your post make sure to mention this video and include a link to it. あなたの投稿には、 このビデオと、そこへのリンクが含まれていることを 確かめてください。 Email me and tell me where I can find your drawings. 私があなたのドローイングを見つけられる場所を メールしてください。 Make sure to follow the guidelines that I describe on proko.com/critiques. proko.com/critiques で私が記述している、 ガイドラインに従ってください。 Everyone that participates will be able to download that critique video. 参加者全員が、 批評ビデオをダウンロードできます。 So go! Go practice! And then post… さあ、練習して、投稿しましょう。 Poses for artists Oh ya and then if you need poses to draw from, I have some photo sets that you can download at proko.com/poses
https://w.atwiki.jp/i_my_me_mammy/pages/62.html
https://w.atwiki.jp/kidscindy/pages/256.html
機能:GTexT*p にぶら下がっているすべてのテキストを画面上に描画する。 call bool MyCanvas DrawOneText(GText* p,wxMemoryDC* pDC) called void MyCanvas OnDraw?(wxMemoryDC* pDC)
https://w.atwiki.jp/tex-atropos/pages/20.html
概要 太字にするコントロールワード パッケージ 仕様 \textbf{text} textが太文字化 備考 関連項目 \textrm (\rmfamily)…ローマン体 \textit (\itshape)…イタリック \emph…イタリック+太字 \textmd (\mdseries)…普通の太さ(デフォルト)・太字と対 \bfseries…太字 \textup (\upshape)…直立(デフォルト)・斜字と対 \textsl (\slshape)…斜字 \textsf (\sffamily)…サンセリフ体 \textsc (\scshape)…小型大文字 \texttt (\ttfamily)…タイプライタ体 \textnormal (\normalfont)…Main document font. 以下数学用環境内で使用するための物 \mathrm…ローマン体 \mathbf…太字 \mathsf…サンセリフ体 \mathtt…タイプライタ体 \mathit…イタリック体, e.g. variable names with several letters. \mathnormal…ノーマル, e.g. inside another type style declaration. \mathcal…カリグラフィック
https://w.atwiki.jp/pgvb2010tj/pages/29.html
DataGridView値の確定 行番号を付ける DataGridView 値の確定 Me.DataGridView1.EndEdit() For i = 0 To Me.DataGridView1.RowCount - 1 Me.DataGridView1(0, i).Value = True Next Me.DataGridView1.UpdateCellValue(0, Me.DataGridView1.CurrentCell.RowIndex) 行番号を付ける Private Sub DataGridView1_CellPainting(ByVal sender As Object, _ ByVal e As DataGridViewCellPaintingEventArgs) _ Handles DataGridView1.CellPainting 行ヘッダーに行番号を表示する 列ヘッダーかどうか調べる If (e.ColumnIndex 0) AndAlso (e.RowIndex = 0) Then セルを描画する e.Paint(e.ClipBounds, DataGridViewPaintParts.All) 行番号を描画する範囲を決定する e.AdvancedBorderStyleやe.CellStyle.Paddingは無視しています Dim indexRect As Rectangle = e.CellBounds indexRect.Inflate(-2, -2) 行番号を描画する TextRenderer.DrawText(e.Graphics, _ (e.RowIndex + 1).ToString(), _ e.CellStyle.Font, _ indexRect, _ e.CellStyle.ForeColor, _ TextFormatFlags.Right Or TextFormatFlags.VerticalCenter) 描画が完了したことを知らせる e.Handled = True End If End Sub
https://w.atwiki.jp/pqjp/pages/389.html
?xml version="1.0"? TextLibrary Text tag="[Conv_Q3Q5ff_NAME1]" Lord Bane /Text Text tag="[Conv_Q3Q5ff_0000]" So here you are at last. You have traveled a long way, mortal. You are very, very persistent. /Text Text tag="[Conv_Q3Q5ff_0001]" So here you are at last. You have traveled a long way, mortal. You are very, very persistent. /Text Text tag="[Conv_Q3Q5ff_0002]" So here you are at last. You have traveled a long way, mortal. You are very, very persistent. /Text Text tag="[Conv_Q3Q5ff_0003]" So here you are at last. You have traveled a long way, mortal. You are very, very persistent. /Text Text tag="[Conv_Q3Q5ff_0004]" This is where you probably expect me to give you the chance to withdraw your forces. But I apos;ll pass. I think we all know how that conversation would go. /Text Text tag="[Conv_Q3Q5ff_0005]" This is where you probably expect me to give you the chance to withdraw your forces. But I apos;ll pass. I think we all know how that conversation would go. /Text Text tag="[Conv_Q3Q5ff_0006]" This is where you probably expect me to give you the chance to withdraw your forces. But I apos;ll pass. I think we all know how that conversation would go. /Text Text tag="[Conv_Q3Q5ff_0007]" This is where you probably expect me to give you the chance to withdraw your forces. But I apos;ll pass. I think we all know how that conversation would go. /Text Text tag="[Conv_Q3Q5ff_0008]" YOU would offer ME a chance to surrender? How about if I make YOU an offer instead? /Text Text tag="[Conv_Q3Q5ff_0009]" YOU would offer ME a chance to surrender? How about if I make YOU an offer instead? /Text Text tag="[Conv_Q3Q5ff_0010]" YOU would offer ME a chance to surrender? How about if I make YOU an offer instead? /Text Text tag="[Conv_Q3Q5ff_0011]" YOU would offer ME a chance to surrender? How about if I make YOU an offer instead? /Text Text tag="[Conv_Q3Q5ff_0012]" What are you talking about? /Text Text tag="[Conv_Q3Q5ff_0013]" What are you talking about? /Text Text tag="[Conv_Q3Q5ff_0014]" What are you talking about? /Text Text tag="[Conv_Q3Q5ff_0015]" What are you talking about? /Text Text tag="[Conv_Q3Q5ff_0016]" Follow your sword, mortal. Follow the sword you were given by my servant Lord Moarg and see where it leads you. I think you will be... pleasantly surprised. /Text Text tag="[Conv_Q3Q5ff_0017]" Follow your sword, mortal. Follow the sword you were given by my servant Lord Moarg and see where it leads you. I think you will be... pleasantly surprised. /Text Text tag="[Conv_Q3Q5ff_0018]" Follow your sword, mortal. Follow the sword you were given by my servant Lord Moarg and see where it leads you. I think you will be... pleasantly surprised. /Text Text tag="[Conv_Q3Q5ff_0019]" Follow your sword, mortal. Follow the sword you were given by my servant Lord Moarg and see where it leads you. I think you will be... pleasantly surprised. /Text /TextLibrary
https://w.atwiki.jp/bambooflow/pages/258.html
テクスチャマッピングコード テクスチャマッピングについてメモします。 OpenGL3.1(GLSL1.4)以上 テクスチャマッピング 平面に対して2x2のRGBAデータを貼り付け。 コード simple.vert #version 140 uniform mat4 modelMatrix; uniform mat4 viewMatrix; uniform mat4 projectionMatrix; in vec3 a_vertex; in vec3 a_normal; in vec2 a_texcoord; out vec3 v_normal; out vec2 v_texcoord; void main(void) { mat4 modelViewMatrix = viewMatrix*modelMatrix; v_normal = (viewMatrix*modelMatrix*vec4(a_normal, 0.0)).xyz; v_texcoord = a_texcoord; gl_Position = projectionMatrix*modelViewMatrix*vec4(a_vertex.xyz, 1.0); } simple.frag #version 140 uniform sampler2D texture0; in vec3 v_normal; in vec2 v_texcoord; out vec4 fragColor; void main(void) { float intensity; intensity = max(dot(v_normal, vec3(0.0,0.0,1.0)),0.0); fragColor = texture2D(texture0, v_texcoord) * intensity; //fragColor = texture2D(texture0, v_texcoord); } ソースコード #include iostream #include fstream #include cstdlib #include GL/glew.h #include GL/glut.h #include "Transform.h" GLuint programObject; GLuint vertexShader; GLuint fragmentShader; GLint modelLocation; GLint viewLocation; GLint projectionLocation; GLfloat viewMatrix[16]; GLfloat projectionMatrix[16]; class Plane { private GLuint vid[4]; // vertex, normal, texcoord, index GLint vertexLocation; GLint normalLocation; GLint texCoordLocation; GLuint texId[1]; GLint textureLocation; GLuint numIndices; GLfloat matrix[16]; public void setup(GLuint programObj) { // 平面作成 GLuint numVertices; numVertices = 4; numIndices = 6; const GLfloat vertices[] = { -1.0f, 0.0f, -1.0f, +1.0f, 0.0f, -1.0f, +1.0f, 0.0f, +1.0f, -1.0f, 0.0f, +1.0f }; const GLfloat normals[] = { 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f }; const GLfloat texCoords[] = { 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f }; const GLfloat indices[] = { 0, 2, 1, 0, 3, 2 }; //////////////////////////////////////////////////////////////// // in(attribute)変数への関連付け vertexLocation = glGetAttribLocation(programObj, "a_vertex"); normalLocation = glGetAttribLocation(programObj, "a_normal"); texCoordLocation = glGetAttribLocation(programObj, "a_texcoord"); // uniform変数への関連付け textureLocation = glGetUniformLocation(programObj, "texture0"); glGenBuffers(4, vid); // 頂点データをGPUメモリ側へ転送 glBindBuffer(GL_ARRAY_BUFFER, vid[0]); glBufferData(GL_ARRAY_BUFFER, 3*numVertices*sizeof(GLfloat), vertices, GL_STATIC_DRAW); // 法線データをGPUメモリ側へ転送 glBindBuffer(GL_ARRAY_BUFFER, vid[1]); glBufferData(GL_ARRAY_BUFFER, 3*numVertices*sizeof(GLfloat), normals, GL_STATIC_DRAW); // テクスチャ座標データをGPUメモリ側へ転送 glBindBuffer(GL_ARRAY_BUFFER, vid[2]); glBufferData(GL_ARRAY_BUFFER, 2*numVertices*sizeof(GLfloat), texCoords, GL_STATIC_DRAW); // 頂点番号データをGPUメモリ側へ転送 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vid[3]); glBufferData(GL_ELEMENT_ARRAY_BUFFER, numIndices*sizeof(GLuint), indices, GL_STATIC_DRAW); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glBindBuffer(GL_ARRAY_BUFFER, 0); //////////////////////////////////////////////////////////////// // texture const GLubyte imageData[] = { // RGBA 255, 0, 0, 255, // Red 0, 255, 0, 255, // Green 0, 0, 255, 255, // Blue 255, 255, 0, 255, // Yellow }; glPixelStorei(GL_UNPACK_ALIGNMENT, 1); // 1データを1バイトごと // テクスチャデータをGPUメモリ側へ転送 glGenTextures(1, texId); glActiveTexture(GL_TEXTURE0); // テクスチャユニット番号 0 glBindTexture(GL_TEXTURE_2D, texId[0]); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageData); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glBindTexture(GL_TEXTURE_2D, 0); //////////////////////////////////////////////////////////////// angle = 0.0; } void render() { // vertex glBindBuffer(GL_ARRAY_BUFFER, vid[0]); glVertexAttribPointer(vertexLocation, 3, GL_FLOAT, GL_FALSE, 0, 0); glEnableVertexAttribArray(vertexLocation); // normal glBindBuffer(GL_ARRAY_BUFFER, vid[1]); glVertexAttribPointer(normalLocation, 3, GL_FLOAT, GL_FALSE, 0, 0); glEnableVertexAttribArray(normalLocation); // texcoord glBindBuffer(GL_ARRAY_BUFFER, vid[2]); glVertexAttribPointer(texCoordLocation, 2, GL_FLOAT, GL_FALSE, 0, 0); glEnableVertexAttribArray(texCoordLocation); // texture glUniform1i(textureLocation, 0); // テクスチャユニット番号 0 glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, texId[0]); // index glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vid[3]); // draw glDrawElements(GL_TRIANGLES, numIndices, GL_UNSIGNED_INT, 0); } float angle; void update() { sl_LoadIdentityf(matrix); sl_Scalef(matrix, 2.0f, 2.0f, 2.0f); // 2倍にする //sl_Translatef(matrix, 0.0f, 0.0f, 0.0f); //sl_Rotatef(matrix, angle, 1.0f, 0.0f, 0.0f); //angle += 1.0f; //if (angle 360.0f) angle = 0.0f; } GLfloat* m() { return matrix; } }; Plane plane; // prototype void display(); void reshape(int w, int h); void timer(int t); void init(); bool initGlsl(); void setupParams(); GLuint LoadShader(GLenum type, const char *fileName); void display() { plane.update(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glUseProgram(programObject); // transform glUniformMatrix4fv(viewLocation, 1, GL_FALSE, viewMatrix); glUniformMatrix4fv(projectionLocation, 1, GL_FALSE, projectionMatrix); glUniformMatrix4fv(modelLocation, 1, GL_FALSE, plane.m()); plane.render(); glUseProgram(0); glutSwapBuffers(); } void reshape(int w, int h) { glViewport(0, 0, w, h); sl_LoadIdentityf(projectionMatrix); sl_Perspectivef(projectionMatrix, 30, (GLfloat)w/(GLfloat)h, 1.0f, 100.0f); } void timer(int t) { glutPostRedisplay(); glutTimerFunc(t, timer, 17); } void init() { glClearColor(0.5, 0.5, 0.5, 1.0); glClearDepth(1.0f); sl_LoadIdentityf(viewMatrix); sl_LookAtf(viewMatrix, 3.0f, 4.0f, 5.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); } bool initGlsl() { programObject = glCreateProgram(); if (programObject == 0) return false; vertexShader = LoadShader(GL_VERTEX_SHADER, "simple.vert"); glAttachShader(programObject, vertexShader); fragmentShader = LoadShader(GL_FRAGMENT_SHADER, "simple.frag"); glAttachShader(programObject, fragmentShader); GLint linked; glLinkProgram(programObject); glGetProgramiv(programObject, GL_LINK_STATUS, linked); if (!linked) { GLint infoLen = 0; glGetProgramiv(programObject, GL_INFO_LOG_LENGTH, infoLen); if (infoLen 1) { char *infoLog = new char[sizeof(char)*infoLen]; glGetProgramInfoLog(programObject, infoLen, NULL, infoLog); std cerr "Error linking program \n" infoLog "\n"; delete [] infoLog; } glDeleteProgram(programObject); return false; } return true; } void setupParams() { // Fragment data glBindFragDataLocation(programObject, 0, "fragColor"); // Transform Matrix modelLocation = glGetUniformLocation(programObject, "modelMatrix"); viewLocation = glGetUniformLocation(programObject, "viewMatrix"); projectionLocation = glGetUniformLocation(programObject, "projectionMatrix"); // objects plane.setup(programObject); } GLuint LoadShader(GLenum type, const char *fileName) { GLuint shader; GLint compiled; std fstream inputFile(fileName); std istreambuf_iterator char dataBegin(inputFile); std istreambuf_iterator char dataEnd; std string fileData(dataBegin, dataEnd); const char *file = fileData.c_str(); shader = glCreateShader(type); if (shader == 0) return 0; glShaderSource(shader, 1, file, NULL); glCompileShader(shader); glGetShaderiv(shader, GL_COMPILE_STATUS, compiled); if (!compiled) { GLint infoLen = 0; glGetShaderiv(shader, GL_INFO_LOG_LENGTH, infoLen); if (infoLen 1) { char* infoLog = new char[sizeof(char)*infoLen]; glGetShaderInfoLog(shader, infoLen, NULL, infoLog); std cerr "Error compiling shader " fileName "\n" infoLog "\n"; delete [] infoLog; } glDeleteShader(shader); return 0; } return shader; } int main(int argc, char *argv[]) { glutInit( argc, argv); glutInitWindowSize(600, 400); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); glutCreateWindow("test"); glutDisplayFunc(display); glutReshapeFunc(reshape); glutTimerFunc(100, timer, 17); GLenum err; glewExperimental = GL_TRUE; err = glewInit(); if (err != GLEW_OK) { std cerr "GLEW error " glewGetErrorString(err) "\n"; std exit(1); } init(); initGlsl(); setupParams(); glutMainLoop(); return 0; }